package com.chy.blog_web.modular.web.service.impl;

import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chy.blog_web.core.el.ELSession;
import com.chy.blog_web.modular.web.entity.BoInfoSendMrg;
import com.chy.blog_web.modular.web.entity.BoMsgTemplate;
import com.chy.blog_web.modular.web.mapper.BoInfoSendMrgMapper;
import com.chy.blog_web.modular.web.service.IBoInfoSendMrgService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * 描述：信息发送管理表 service业务层
 * 作者：chenhuiyan
 * 时间：2020/04/10
 */
@Service
@Transactional(readOnly = true)
public class BoInfoSendMrgServiceImpl extends ServiceImpl<BoInfoSendMrgMapper, BoInfoSendMrg> implements IBoInfoSendMrgService {

    /**
     * 查询列表
     * @param params
     * @return
     */
    public List<Map<String, Object>> list(Map<String, Object> params){
        return baseMapper.list(params);
    }

    /**
     * 查询总数
     * @param params
     * @return
     */
    public int getCount(Map<String, Object> params){
        return baseMapper.getCount(params);
    }

    /**
     * 查询详情
     * @param id
     * @return
     */
    public Map<String, Object> getInfoById(String id){
        return baseMapper.getInfoById(id);
    }

    /**
     * 生成短信发送日志
     * @param resultJson 发送结果返回值
     * @param msgTemplate 短信模板信息
     * @param personJson 发送模板内容
     * @param receiveName 接收人
     * @param phone 接收手机
     * @param msgType 发送类型
     * @param markId 节日编号
     */
    @Transactional
    public void saveMsgLog(String resultJson, BoMsgTemplate msgTemplate, JSONObject personJson,
                           String receiveName, String phone, Integer msgType, String markId){
        //生成信息发送记录
        Map<String, Object> sendResult = JSONUtil.parseObj(resultJson);
        String remark = "请求状态码：" + sendResult.get("Code") + "；";
        remark += "状态码描述：" + sendResult.get("Message") + "；";
        remark += "发送回执ID：" + sendResult.get("BizId") + "；";
        remark += "请求ID：" + sendResult.get("RequestId");

        //用EL解析短信内容
        Map<String, Object> params = JSONUtil.parseObj(personJson); //短信模板内容需要的参数
        String content = ELSession.getString(params, msgTemplate.getContent());

        BoInfoSendMrg boInfoSendMrg = new BoInfoSendMrg();
        boInfoSendMrg.preInsert();
        boInfoSendMrg.setMsgTemId(msgTemplate.getId()); //短信模板ID
        boInfoSendMrg.setMsgType(msgType); //发送类型
        boInfoSendMrg.setReceiveName(receiveName); //接收人
        boInfoSendMrg.setReceivePhone(phone); //接收手机
        boInfoSendMrg.setSendResult(1); //发送状态(1等待回执,2发送失败,3发送成功)
        boInfoSendMrg.setAgainSend(0); //已再次发送(0否,1是)
        boInfoSendMrg.setMarkId(markId); //节日编号
        if("OK".equals(sendResult.get("Code"))){
            boInfoSendMrg.setSendStatus(0); //发送状态：成功
        }else{
            boInfoSendMrg.setSendStatus(1); //发送状态：失败
        }
        boInfoSendMrg.setBizId(sendResult.get("BizId") + ""); //回执ID
        boInfoSendMrg.setRemark(remark); //发送结果
        boInfoSendMrg.setContent(content); //内容
        save(boInfoSendMrg);
    }

}
